草庐IT

Android TalkBack 和 fragment 堆栈

全部标签

c++ - QObject在删除时是否区分堆栈和堆分配的 child ?

根据Qt文档:QObjectsorganizethemselvesinobjecttrees.WhenyoucreateaQObjectwithanotherobjectasparent,theobjectwillautomaticallyadditselftotheparent'schildren()list.Theparenttakesownershipoftheobject;i.e.,itwillautomaticallydeleteitschildreninitsdestructor.对我来说,这意味着当一个QObject被删除时,它会遍历并调用delete它存储在其子列表中的

c++ - 减少 C++ 递归函数中堆栈的使用

我有一个程序可以计算任何数字的阶乘。当我尝试对100,000这样的大数字执行此操作时,它会在达到0之前停止。我猜这是某种安全机制,可以防止出现不良情况。虽然这很好,但它会阻止程序计算巨大的数字。在我的程序中,变量x达到0后,它停止递归函数。所以不需要这个“安全网”。这是我的引用代码:#include#includeintanswer=1;intrecursive(intx);usingstd::cout;usingstd::cin;intmain(){recursive(100000);}intrecursive(intx){cout0){recursive(x);}else{cout

c++ - 如何确定一个对象是否应该在堆栈上?

我一直在寻找在C++中的堆栈或堆上分配对象的经验法则。我在这里找到了很多关于SO的讨论。很多人说,这是关于一个对象的生命周期。如果您需要比函数范围更长的生命周期,请将其放入堆中。这是完全有道理的。但是让我感到困惑的是,很多人说,如果对象很小,就分配给堆栈。如果对象很大,就把它放到堆中。但是他们都没有说如何识别一个物体是大还是小?我有以下问题,如何判断一个物体的大小?堆栈的最大大小是多少?每个操作系统都有不同的堆栈大小?我有一个包装器类,它包装了vector.它将包含大约100个项目。把这个类分配到栈上会不会导致栈溢出?我试过了,但效果很好。不确定我做错了什么。

c++ - 限制在 C++ 中的堆和堆栈上创建对象

我有一个关于如何限制在堆或栈上创建对象的问题?例如,如何确保一个对象不在堆上?如何确保对象不在堆栈中?谢谢! 最佳答案 为防止在堆上意外创建对象,请为其提供私有(private)运算符new。例如:classX{private:void*operatornew(size_t);void*operatornew[](size_t);};为防止在堆栈上意外创建,将所有构造函数设为私有(private),和/或将析构函数设为私有(private),并提供执行相同功能的友元函数或静态函数。例如,这是同时执行这两种操作的方法:classX{p

c++ - C++ 隐含了这个,以及它是如何被压入堆栈的

我需要知道,当调用C++中的类方法时,隐式“this”指针是第一个参数还是最后一个参数。即:它是先入栈还是最后入栈。换句话说,我是在询问一个被调用的类方法是否被编译器认为是:intfoo::bar(foo*constthis,intarg1,intarg2);//or:intfoo::bar(intarg1,intarg2,foo*constthis);因此,通过扩展,更重要的是,这也将回答G++是将this指针分别压入最后还是最先。我查询了谷歌,但没有找到太多。另外,当调用C++函数时,它们是否与C函数执行相同的操作?即:pushebpmovebp,esp总而言之:被调用的类方法看起

c++ - 将堆栈分配的对象作为指针参数发送给其他函数好吗?

将堆栈分配的对象作为指针参数发送给其他函数好吗? 最佳答案 是的,但是对于这种情况更常见的C++习惯用法是使用引用(可能是constrreference)而不是指针。所以不是voidfoo(sometype*p){p->func();}你写:voidfoo(sometype&p){p.func();}这样做的好处是您不需要在调用者中取消引用对象:voidafunc(){sometypet;foo(t);}并且还给读者一个潜意识的暗示,即您不打算让函数取得对象的所有权。 关于c++-将堆栈

c++ - 堆栈弹出操作能否在 C++11 中安全地返回值

因此,在C++11中似乎不再需要对堆栈中的.top和.pop进行如此严格的隔离。也许我遗漏了一些东西,但C++03和之前的问题是如果.pop返回一个值,则复制操作可能会在元素复制期间抛出异常。示例(取自here的代码示例):template//TmusthavedefaultctorandcopyassignmentclassStack{public:Stack();~Stack();Stack(constStack&);Stack&operator=(constStack&);unsignedCount();//returns#ofT'sinthestackvoidPush(cons

c++ - 简单的 USB 主机堆栈

我正在尝试使用Atmel处理器上的USB主机端口连接到单个USB设备。我有一个内存有限且没有操作系统的嵌入式系统。我想实现一个简单的专用主机来连接单个USB从属设备。谁能指导我实现简单的USB主机?处理器是AtmelAT91SAM9261S。 最佳答案 首先,如果我没记错的话,AT91SAM9261S有OHCIusbcontroller在船上,您至少需要实现简单的主机Controller驱动程序(您可以查看Linux实现)。根据您的设备将使用的传输类型,它可能不是很难-很难:)没有简单的方法来实现USB堆栈。实现Controller

c++ - 在 C++ 中处理堆栈损坏的工具

编辑:由于对我的示例的评论是正确的,我将其删除并将其变成一个通用问题:在我的项目中,有时我会遇到堆栈损坏的情况。无论我多么努力地编写代码来避免它,有时它就是不可避免的。但是当它发生时,有什么方法可以对抗它?我在这个博客里找到了好心人给的一个宏:http://rxwen.blogspot.com/2009/04/detect-stack-corruption.html它读取ebp寄存器值以检测损坏。但肯定会有更复杂的工具来帮助避免搬起石头砸自己的脚。我在Windows中使用Codeblocks和gcc编译器进行编程。我提出这个问题的原因是找到我可以在我的编程环境下使用的工具来帮助我检测这

c++ - 如何实现仅在堆栈上分配的字符串

在大约十年前的一个项目中,我们发现std::vector的动态分配导致严重的性能消耗。在这种情况下,它分配了许多小vector,所以快速的解决方案是编写一个类似vector的类来包装一个基于堆栈的预分配char用作其容量的原始存储的数组。结果是static_vector.如果你知道一些基础知识,这样的东西很容易写,你可以找到quiteafew这样的野兽ontheweb.事实上,boosthasone,现在也是。现在在嵌入式平台上工作,我们恰好需要一个static_basic_string.那将是一个字符串,它在堆栈上预先分配了固定的最大内存量并将其用作其容量。起初我认为这应该相当容易(